package com.captjack.micro.dao.database.base;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author Capt Jack
 * @date 2017/11/10
 */
public abstract class BaseDao {

    /**
     * 修正Sql 根据输入参数，如果为null则不带相关查询条件，要求sql中相关语句使用@符分隔开 如： SELECT * FROM tb_mobile_user u where 1=1 @and u.op_id=? @and
     * u.vid = ? SELECT * FROM tb_mobile_user u where 1=1 @and u.op_id=? @and u.vid = ? and u.enable_flag = 1 order by
     * ....
     * 问题：在in(?)这种参数中无法处理
     *
     * @param sql 查询语句
     * @param obj 查询参数数组，要与sql语句中的条件数据相匹配
     * @return 查询参数
     */
    public Object[] fixSql(String sql, Object[] obj) {
        List<Object> li = new ArrayList<Object>();
        String[] tmps = sql.split("@");
        StringBuilder sb = new StringBuilder(sql.length());
        if (obj.length < tmps.length) {
            int i = 0;
            sb.append(tmps[i++]).append(" ");
            for (Object o : obj) {
                if (o != null) {
                    int index;
                    if ((index = sb.toString().indexOf("*?*")) > -1) {
                        sb.delete(index, index + 3);
                        sb.insert(index, o.toString());
                    } else {
                        if (!"temp-str".equals(o.toString())) {
                            li.add(o);
                        }
                    }
                    sb.append(tmps[i]).append(" ");
                }
                i++;
            }
            if (i < tmps.length && tmps.length - i == 1) {
                sb.append(tmps[i]).append(" ");
            }
            sql = sb.toString();
        }
        return new Object[]{sql, li.toArray()};
    }

    protected String getUUID() {
        return UUID.randomUUID().toString();
    }

}
